﻿using System;
using System.Collections;
using System.Data;

namespace EasyLibrary.AR.Classes
{
    public class Viatura:AR.ActiveRecord
    {
        //  private Color cor;

        //  private List<ServicosAtribuicao> servicoatribuido;

        public Viatura()
        {
            Idviatura = -1;
            KmsHora = true;
            Matricula = string.Empty;
            Refidkit = -1;
            Nquadro = string.Empty;
            Refidmodelo = -1;
            Cilindrada = -1;
            Pesototal = -1;
            Tara = -1;
            Lotacao = -1;
            Datafabrico = DateTime.MaxValue;
            Dataultinsp = DateTime.MaxValue;
            Dataproxinsp = DateTime.MaxValue;
            //  cor = Color.Empty;
            Disteixos = -1;
            Refidtipoviatura = -1;
            Refidtipocombustivel = -1;
            Observacoes = string.Empty;
            Activo = true;
            Datainsercao = DateTime.MaxValue;
            Refidutilizador = -1;
            //  servicoatribuido = new List<ServicosAtribuicao>();
            Capacidade = -1;
            NumRegress = 1;
            PercLitr = -1;
            Centralina = false;
            RefIdEmpresa = -1;
            Empresa = "";
            Modelo = "";
            Marca = "";
            Tipo = "";
            CapacidadeCima = -1;
            Motores2 = false;
            MediaAlta = -1;
            MediaAltaCima = -1;
            MediaBaixa = -1;
            MediaBaixaCima = -1;
            NumMotores = 1;
            Latitude = -1;
            Longitude = -1;
        }

        public int NumMotores { get; set; }

        public double MediaAlta { get; set; }

        public double MediaAltaCima { get; set; }

        public double MediaBaixa { get; set; }

        public double MediaBaixaCima { get; set; }


        public string Modelo { get; set; }

        public bool Motores2 { get; set; }

        public string Marca { get; set; }

        public string Tipo { get; set; }

        public int Idviatura { get; set; }

        public bool KmsHora { get; set; }

        public int RefIdEmpresa { get; set; }

        public string Empresa { get; set; }

        public string Matricula { get; set; }

        public long Refidkit { get; set; }

        public string Nquadro { get; set; }

        public int Refidmodelo { get; set; }

        public int Cilindrada { get; set; }

        public int Pesototal { get; set; }

        public int Tara { get; set; }

        public int Lotacao { get; set; }

        public DateTime Datafabrico { get; set; }

        public DateTime Dataultinsp { get; set; }

        public DateTime Dataproxinsp { get; set; }

        /*    public Color Cor
        {
            get { return cor; }
            set { cor = value; }
        }*/

        public int Disteixos { get; set; }

        public int Refidtipoviatura { get; set; }

        public int Refidtipocombustivel { get; set; }

        public string Observacoes { get; set; }

        public bool Activo { get; set; }

        public DateTime Datainsercao { get; set; }

        public long Refidutilizador { get; set; }

        public int Capacidade { get; set; }

        public int CapacidadeCima { get; set; }

        public int NumRegress { get; set; }

        public double PercLitr { get; set; }

        public bool Centralina { get; set; }

        public double Longitude { get; set; }

        public double Latitude { get; set; }

        /*  public List<ServicosAtribuicao> Servicoatribuido
        {
            get { return servicoatribuido; }
            set { servicoatribuido = value; }
        }*/

        public Viatura(int id)
        {
            this.Idviatura = id;
          

        }


        public Viatura(int id,string matricula,string t)
        {
            this.Idviatura = id;
            this.Matricula = matricula;
            this.Tipo = t;
    
        }

        public Viatura(int id, string matricula, string t, double lat, double lng)
        {
            this.Idviatura = id;
            this.Matricula = matricula;
            this.Tipo = t;
            this.Latitude = lat;
            this.Longitude = lng;
        }

        

        	protected Viatura(DataRow row)
		{
            this.Idviatura = (int)row["IDViaturas"];
            this.Matricula = (string)row["matricula"];
        	this.Tipo = (string) row["TipoViatura"];
		}

 

        


        public IList LoadAll(int user)
        {
            try
			{
				DataSet ds = ExecuteQuery(GetConnection(false), "SELECT DISTINCT Viaturas.IDViaturas, Viaturas.matricula, TiposViatura.TipoViatura FROM            Viaturas INNER JOIN Kits ON Viaturas.RefIDKits = Kits.IDkits INNER JOIN ViaturasUtilizadores ON ViaturasUtilizadores.RefIDViaturas = Viaturas.IDViaturas INNER JOIN TiposViatura ON Viaturas.RefIDTiposViatura = TiposViatura.IDTiposViatura WHERE  (Viaturas.RefIDKits IS NOT NULL) AND (Viaturas.Activo = 1) AND (ViaturasUtilizadores.RefIDUtilizadores = "+user+") ORDER BY Viaturas.matricula");
                
				IList ret = new ArrayList();

				foreach (DataRow r in ds.Tables[0].Rows)
				{
                    Viatura v=new Viatura(r);
				    ret.Add(v);
				}

				return ret;
			}
			catch (Exception ex)
			{
				throw new ApplicationException("Erro BD", ex);
			}
		}

        public IList LoadAllByCat(int user,string cat)
        {
            try
            {
                DataSet ds = ExecuteQuery(GetConnection(false), "SELECT DISTINCT Viaturas.IDViaturas, Viaturas.matricula, TiposViatura.TipoViatura FROM            Viaturas INNER JOIN Kits ON Viaturas.RefIDKits = Kits.IDkits INNER JOIN ViaturasUtilizadores ON ViaturasUtilizadores.RefIDViaturas = Viaturas.IDViaturas INNER JOIN TiposViatura ON Viaturas.RefIDTiposViatura = TiposViatura.IDTiposViatura WHERE  (Viaturas.RefIDKits IS NOT NULL) AND (TiposViatura.TipoViatura LIKE '"+cat+"') AND (Viaturas.Activo = 1) AND (ViaturasUtilizadores.RefIDUtilizadores = " + user + ") ORDER BY Viaturas.matricula");

                IList ret = new ArrayList();

                foreach (DataRow r in ds.Tables[0].Rows)
                {
                    Viatura v = new Viatura(r);
                    ret.Add(v);
                }

                return ret;
            }
            catch (Exception ex)
            {
                throw new ApplicationException("Erro BD", ex);
            }
        }




        public Viatura getViaturaById(int id)
        {


            DataSet ds = ExecuteQuery("SELECT * FROM Viaturas WHERE IDViaturas=" + id);
            Viatura v = new Viatura();
            foreach (DataRow dr in ds.Tables[0].Rows)
            {
                v.Idviatura = Convert.ToInt32(dr["IdViaturas"]);

            }
            return v;
        }

        public IList getViaturaByRota(int idR)
        {


            DataSet ds = ExecuteQuery("SELECT Rotas.IDRota, RotasViatura.IDViatura, Viaturas.matricula FROM Rotas INNER JOIN RotasViatura ON Rotas.IDRota = RotasViatura.IDRota INNER JOIN Viaturas ON RotasViatura.IDViatura = Viaturas.IDViaturas WHERE (Rotas.IDRota = "+idR+")");

            Viatura v = new Viatura();
            IList ret = new ArrayList();
            foreach (DataRow dr in ds.Tables[0].Rows)
            {
                v.Idviatura = Convert.ToInt32(dr["IdViatura"]);
                v.Matricula=(string)dr["Matricula"];
                ret.Add(v);
            }
            return ret;
        }

        public override void Save()
        {
            throw new NotImplementedException();
        }
    }
    
}